package com.web;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.aerolinea.Aerolinea;
import com.asiento.Asiento;
import com.usuario.Usuario;


public class Aterrizar {
	
	private static final Aterrizar INSTANCE = new Aterrizar();
	private HashSet<Aerolinea> aerolineas;
	private HashSet<Usuario> usuarios;

	
	public Aterrizar(){
		aerolineas = new HashSet<Aerolinea>();
		usuarios= new HashSet<Usuario>();
	}
	
	/**
	 * Busca asientos disponibles y los devuelve.
	 * 
	 * @param origen Origen del vuelo
	 * @param destino Destino del vuelo
	 * @param fecha Fecha del vuelo
	 * @param clase Clase del asiento
	 * @param ubicacion Ubicacion del asiento
	 * @return Set<Asiento> con los asientos disponibles que se ajustan a la busqueda
	 */
	public List<Asiento> buscar(Usuario usuario, String origen, String destino, String fechaSalida, String fechaLlegada, String horaSalida, String horaLlegada, String clase, String ubicacion) {
		List<Asiento> fAsientos = new ArrayList<Asiento>();
		
		for (Aerolinea aerolinea : aerolineas){
			Set<Asiento> asientosAerolinea = aerolinea.buscar(usuario, origen, destino, fechaSalida, horaSalida, fechaLlegada, horaLlegada, clase, ubicacion);
			fAsientos.addAll(asientosAerolinea);
		}
		return fAsientos;
	}

	/**
	 * Reserva un pasaje seleccionado
	 * @param codigo Codigo del asiento seleccionado
	 * @param dni DNI de la persona que reserva el pasaje
	 */
	public void reservar(String codigo, String dni, Aerolinea aerolinea){
		aerolinea.reservar(codigo, dni);
	}
	
	public static Aterrizar getInstance() {
		return INSTANCE;
	}

	public void agregarAerolinea(Aerolinea aerolinea){
		aerolineas.add(aerolinea);
	}

	public void agregarUsuario(Usuario usuario){
		usuarios.add(usuario);
	}

	public void comprar(Asiento asiento) {
		asiento.getAerolinea().comprar(asiento.getCodigo());
		
	}
}
